#include<vector>
#include<algorithm>
using namespace std;
class Solution 
{
public:
    int triangleNumber(vector<int>& nums) 
    {
        
        //三边中较小两边之和大于第三边就可以构成三角形1
        //接着我们固定第三边用双指针枚举两个数快速得出结果
        if(nums.size()<3)
        {
            return 0;
        }
        sort(nums.begin(),nums.end());
        int ret=0;
        for(int i=nums.size()-1;i>=2;i--)
        {
            int num=nums[i];
            int l=0,r=i-1;
            while(l<r)
            {
                //此时固定r，l到r的数都满足
                if(nums[l]+nums[r]>num)
                {
                    ret+=r-l;
                    r--;
                }
                //固定l,l到r都不满足 l++
                else
                {
                    l++;
                }
            }
            
        }
        return ret;
    }
};